package com.ray.api.service;

import java.util.List;
import java.util.Map;

import com.ray.auth.system.table.entity.App;
import com.ray.auth.system.table.entity.Button;
import com.ray.auth.system.table.entity.Dict;
import com.ray.auth.system.table.entity.Menu;
import com.ray.auth.system.table.entity.Notice;
import com.ray.auth.system.table.entity.Organization;
import com.ray.auth.system.table.entity.Role;
import com.ray.auth.system.table.entity.User;
import com.ray.auth.system.table.entity.Work;
import com.zjhc.flyhong.common.datastructure.TreeNode;
import com.zjhc.flyhong.common.function.operator.LoginUser;
import com.zjhc.flyhong.common.function.operator.PageDto;
import com.zjhc.flyhong.common.web.Result;

/**
 * 用户权限中心对外接口
 * @author ray
 *
 */
public interface UcenterApiService {
    /**
     * 查询用户
     * @param userName
     * @return
     */
	Result<User> queryUser(String userName);
    /**
     * 查询注册应用
     * @param appid
     * @return
     */
	Result<App> queryApp(String appid);
	/**
	 * 查询部门信息
	 * @param orgCode
	 * @return
	 */
	Result<Organization> queryOrgByOrgCode(String orgCode);
	/**
	 * 获取组织信息
	 * @param tenantId
	 * @return
	 */
	Result<Organization> queryOrgByTenantId(String tenantId);
	/**
	 * 获取超级管理的餐单权限
	 * @param appid
	 * @return
	 */
	Result<List<Menu>> querySuperUserMenus(String appid);
	/**
	 * 获取超级管理的按钮权限
	 * @param appid
	 * @return
	 */
	Result<List<Button>> querySuperUserButtons(String appid);
	/**
	 * 获取用户的餐单权限
	 * @param userId
	 * @param appid
	 * @return
	 */
	Result<List<Menu>> queryUserMenus(String userId, String appid);
	/**
	 * 获取用户的按钮权限
	 * @param userId
	 * @param appid
	 * @return
	 */
	Result<List<Button>> queryUserButtons(String userId, String appid);
	/**
	 * 获取用户
	 * @param object
	 * @param pageNum
	 * @param user
	 * @return
	 */
	PageDto<Object> findUserPage(Object object, int pageNum, LoginUser user);
	/**
	 * 获取角色
	 * @param object
	 * @param pageNum
	 * @param user
	 * @return
	 */
	PageDto<Object> findRolePage(Object object, int pageNum, LoginUser user);
	/**
	 * 获取组组
	 * @param object
	 * @param pageNum
	 * @param user
	 * @return
	 */
	PageDto<Object> findOrgPage(Object object, int pageNum, LoginUser user);
	/**
	 * 查询对应用户餐单
	 * @param loginUser
	 * @param msgByKey
	 * @return
	 */
	Result<List<TreeNode>> queryMenus(LoginUser loginUser, String msgByKey);
	/**
	 * 查询对应用户餐单
	 * @param loginUser
	 * @param msgByKey
	 * @return
	 */
	Result<List<TreeNode>> queryUserHomeMenu(String msgByKey, LoginUser loginUser);
	/**
	 * 获取用户菜单对应的按钮
	 * @param user
	 * @param menuId
	 * @return
	 */
	Result<Map<String, List<Button>>> queryUserButtonsWithMenu(LoginUser user, String menuId);
	/**
	 * 异步获取组织
	 * @param id
	 * @param level
	 * @param loginUser
	 * @return
	 */
	Result<List<TreeNode>> queryOrgListByParentId(String id, Integer level, LoginUser loginUser);
	/**
	 * 查询组织
	 * @param id
	 * @return
	 */
	Result<Organization> queryOrg(String id);
	/**
	 * 查询组织名称
	 * @param baid
	 * @return
	 */
	String queryOrgName(String baid);
	/**
	 * 查询用户列表
	 * @param pageDto
	 * @param user
	 * @param user2
	 * @return
	 */
	PageDto<User> queryUserList(PageDto<User> pageDto, User user, LoginUser user2);
	/**
	 * 获取用户
	 * @param ids
	 * @return
	 */
	Result<List<User>> queryUserList(List<String> ids);
	/**
	 * 获取角色
	 * @param pageDto
	 * @param role
	 * @param loginUser
	 * @return
	 */
	PageDto<Role> queryRoleList(PageDto<Role> pageDto, Role role, LoginUser loginUser) ;

	/**
	 * 获取角色
	 * @param ids
	 * @return
	 */
	Result<List<Role>> queryRoleList(List<String> ids);
	/**
	 * 获取审批用户
	 * @param userIds
	 * @param roleIds
	 * @param user
	 * @return
	 */
	List<User> queryUserList(List<String> userIds, List<String> roleIds, LoginUser user);
	/**
	 * 查询用户名称
	 * @param startUserId
	 * @return
	 */
	String queryUserName(String userId);
	/**
	 * 查询字典
	 * @param type
	 * @return
	 */
	List<Dict> queryDictsByDictType(String type);
	/**
	 * 查询APP
	 * @return
	 */
	List<App> queryApp();
	/**
	 * 查询工作
	 * @param id
	 * @param user
	 * @return
	 */
	Work queryWork(String id, LoginUser user);
	/**
	 * 查询通知
	 * @param id
	 * @param user
	 * @return
	 */
	Notice queryNotice(String id, LoginUser user);
	/**
	 * 通知提醒
	 * @param user
	 * @return
	 */
	Notice queryFirstWindowNotice(LoginUser user);
	/**
	 * 查询我的工作
	 * @param work
	 * @param dto
	 * @param loginUser
	 * @return
	 */
	PageDto<Work> queryMyTodoWork(Work work, PageDto<Work> dto, LoginUser loginUser);
	/**
	 * 查询通知
	 * @param notice
	 * @param noticePagedto
	 * @param loginUser
	 * @return
	 */
	PageDto<Notice> queryNotice(Notice notice, PageDto<Notice> noticePagedto, LoginUser loginUser);
}
